package com.py.androidUtils.utils;

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

import android.graphics.Bitmap;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.core.listener.ImageLoadingProgressListener;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import com.readyidu.app.R;

/**
 * @说明 加载图片工具
 * @作者 LY
 * @文件 LoadingImages.java
 * @时间 2015年6月25日 上午9:42:09
 * @版权 Copyright(c) 2015 LY-版权所有
 * @email dengdai.ly@qq.com
 */
public class LoadingImages {
	private static LoadingImages mInstance;

	/**
	 * 单例同步模式
	 * 
	 * @param context
	 * @return
	 */
	public synchronized static LoadingImages getInstance() {
		if (mInstance == null) {
			mInstance = new LoadingImages();
		}
		return mInstance;
	}

	public DisplayImageOptions initRoundedOptions() {
		DisplayImageOptions options = new DisplayImageOptions.Builder()//
						.showImageOnLoading(R.drawable.common_images_nomal)// 默认图片
						.showImageForEmptyUri(R.drawable.common_images_nomal)// 图像为空
						.showImageOnFail(R.drawable.common_images_error)// 加载错误图片
						.cacheInMemory(true)// 是否缓存
						.cacheOnDisk(true)// 缓存磁盘上
						.considerExifParams(true)//
						.bitmapConfig(Bitmap.Config.RGB_565)// 图片解码
						.build();
		return options;
	}

	/**
	 * 图片加载
	 * 
	 * @param 圆角度数
	 * @return
	 */
	public DisplayImageOptions initRoundedOptions(int rounded) {
		DisplayImageOptions options = new DisplayImageOptions.Builder()//
						.showImageOnLoading(R.drawable.common_images_nomal)// 默认图片
						.showImageForEmptyUri(R.drawable.common_images_nomal)// 图像为空
						.showImageOnFail(R.drawable.common_images_error)// 加载错误图片
						.cacheInMemory(true)// 是否缓存
						.cacheOnDisk(true)// 缓存磁盘上
						.considerExifParams(true)//
						.imageScaleType(ImageScaleType.EXACTLY)//
						.bitmapConfig(Bitmap.Config.RGB_565)// 图片解码
						.displayer(new RoundedBitmapDisplayer(rounded))// 设置圆角
						.build();
		return options;
	}

	/**
	 * 加载图片加上淡入效果
	 * 
	 * @param imagesPath
	 * @param imageView
	 * @param 图片圆角弧度
	 */
	public void loadingImages(String imagesPath, ImageView imageView, int rounded) {
		ImageLoader.getInstance().displayImage(imagesPath, imageView, initRoundedOptions(rounded), new SimpleImageLoadingListener() {
			final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>());

			@Override
			public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
				super.onLoadingComplete(imageUri, view, loadedImage);
				if (loadedImage != null) {
					ImageView imageView = (ImageView) view;
					// 是否第一次显示
					boolean firstDisplay = !displayedImages.contains(imageUri);
					if (firstDisplay) {
						// 图片淡入效果
						FadeInBitmapDisplayer.animate(imageView, 500);
						displayedImages.add(imageUri);
					}
				}
			}
		});
	}

	/**
	 * 加载图片方法
	 * 
	 * @param imagesPath图片路径
	 * @param imageView图片控件
	 * @param progressBar进度
	 * @param 图片圆角弧度
	 */
	public void loadingImages(String imagesPath, ImageView imageView, final ProgressBar progressBar) {
		ImageLoader.getInstance().displayImage(imagesPath, imageView, initRoundedOptions(), new SimpleImageLoadingListener() {
			@Override
			public void onLoadingStarted(String imageUri, View view) {
				progressBar.setProgress(0);
				progressBar.setVisibility(View.VISIBLE);
			}

			@Override
			public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
				progressBar.setVisibility(View.GONE);
			}

			@Override
			public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
				progressBar.setVisibility(View.GONE);
			}
		}, new ImageLoadingProgressListener() {
			@Override
			public void onProgressUpdate(String imageUri, View view, int current, int total) {
				progressBar.setProgress(Math.round(100.0f * current / total));
			}
		});
	}
}
